/**
 * @author Laboratio Av I
 * @since 18/04/2012 14:03:56
 */
package ar.edu.utn.frgp.banco.dao.impl;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;






import ar.edu.utn.frgp.banco.dao.PrestamosDao;

import ar.edu.utn.frgp.banco.dao.connection.ConnectionHandler;
import ar.edu.utn.frgp.banco.dao.connection.IConnectionHandler;




import ar.edu.utn.frgp.banco.domain.Prestamo;

import ar.edu.utn.frgp.banco.exceptions.DataAccessException;


public class PrestamosDaoImpl implements PrestamosDao {
	
	public void altaPrestamo(Prestamo prestamo) throws DataAccessException {

		PreparedStatement ps = null;
		
		IConnectionHandler handler = new ConnectionHandler();
		Connection cn = handler.getConnection();
		
		try {
			
			java.util.Date utilDate = new java.util.Date();
			
			java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

							
			ps = cn.prepareStatement("INSERT INTO prestamos VALUES(?,?,?,?,?,?,?,?)");
			
			ps.setInt   (1, prestamo.getIdprestamo());
			ps.setInt   (2, prestamo.getDni());
			ps.setDate  (3, sqlDate);
			ps.setDouble (4, prestamo.getMonto());
			ps.setInt   (5, prestamo.getCantidadcuotas());
			ps.setDouble (6, prestamo.getInteres());
			ps.setInt   (7, prestamo.getCuenta());
			ps.setInt   (8, prestamo.getEstado());
			
			
			ps.executeUpdate();
			
		} catch (SQLException e) {
			throw new DataAccessException(e);
		} finally {
			handler.closeResources(ps, cn);
		}

	}
	
	public List<Prestamo> traerTodosLosPrestamos() throws DataAccessException {
		  Statement st = null;
	      ResultSet rs = null;
			
			IConnectionHandler handler = new ConnectionHandler();
			Connection cn = handler.getConnection();
			
			List<Prestamo> prestamos = new ArrayList<Prestamo>();
			
			try {
				st = cn.createStatement();
				rs = st.executeQuery("SELECT * FROM prestamos");
				
				Prestamo regPrestamo = null;
				
				while (rs.next()) {
					
					regPrestamo = new Prestamo();
					
					regPrestamo.setIdprestamo(rs.getInt("idprestamo"));
					regPrestamo.setDni(rs.getInt("dni"));
					regPrestamo.setFechaalta(rs.getDate("fechaalta"));
					regPrestamo.setMonto(rs.getDouble("monto"));
					regPrestamo.setCantidadcuotas(rs.getInt("cantidadcuotas"));
					regPrestamo.setInteres(rs.getDouble("interes"));
					regPrestamo.setCuenta(rs.getInt("nrocuenta"));
					regPrestamo.setEstado(rs.getInt("estado"));
					
					
					prestamos.add(regPrestamo);
				}
						
							
			} catch (SQLException e) {
				System.out.println("Error al crear tablas.");
				e.printStackTrace();			
			} finally {
				handler.closeResources(st, cn);
			}
		return prestamos;
	}

	

	public List<Prestamo> traerTodosLosPrestamosDelCliente(int dni) throws DataAccessException {
		  Statement st = null;
	      ResultSet rs = null;
			
			IConnectionHandler handler = new ConnectionHandler();
			Connection cn = handler.getConnection();
			
			List<Prestamo> prestamos = new ArrayList<Prestamo>();
			
			try {
				st = cn.createStatement();
				rs = st.executeQuery("SELECT * FROM prestamos WHERE prestamos.dni = " + dni + " and prestamos.estado = 1");
				
				Prestamo regPrestamo = null;
				
				while (rs.next()) {
					
					regPrestamo = new Prestamo();
					
					regPrestamo.setIdprestamo(rs.getInt("idprestamo"));
					regPrestamo.setDni(rs.getInt("dni"));
					regPrestamo.setFechaalta(rs.getDate("fechaalta"));
					regPrestamo.setMonto(rs.getDouble("monto"));
					regPrestamo.setCantidadcuotas(rs.getInt("cantidadcuotas"));
					regPrestamo.setInteres(rs.getDouble("interes"));
					regPrestamo.setCuenta(rs.getInt("nrocuenta"));
					regPrestamo.setEstado(rs.getInt("estado"));
					
					prestamos.add(regPrestamo);
				}
						
							
			} catch (SQLException e) {
				System.out.println("Error al crear tablas.");
				e.printStackTrace();			
			} finally {
				handler.closeResources(st, cn);
			}
		return prestamos;
	}
	
	
	public Prestamo traerElPrestamo(int nroPrestamo) throws DataAccessException {
		  Statement st = null;
	      ResultSet rs = null;
	      Prestamo prestamo = null;
	      
			IConnectionHandler handler = new ConnectionHandler();
			Connection cn = handler.getConnection();
			
			
			try {
				st = cn.createStatement();
				rs = st.executeQuery("SELECT * FROM prestamos WHERE prestamos.idprestamo = " + nroPrestamo);
				
				
				
				while (rs.next()) {
					
					prestamo = new Prestamo();
					
					prestamo.setIdprestamo(rs.getInt("idprestamo"));
					prestamo.setDni(rs.getInt("dni"));
					prestamo.setFechaalta(rs.getDate("fechaalta"));
					prestamo.setMonto(rs.getDouble("monto"));
					prestamo.setCantidadcuotas(rs.getInt("cantidadcuotas"));
					prestamo.setInteres(rs.getDouble("interes"));
					prestamo.setCuenta(rs.getInt("nrocuenta"));
					prestamo.setEstado(rs.getInt("estado"));
					
					
				}
						
							
			} catch (SQLException e) {
				System.out.println("Error al crear tablas.");
				e.printStackTrace();			
			} finally {
				handler.closeResources(st, cn);
			}
		return prestamo;
	}


	public void actualizarEstado(int idprestamo) throws DataAccessException {
		Statement st = null;
		IConnectionHandler handler = new ConnectionHandler();
		Connection cn = handler.getConnection();
		
			try {
				st = cn.createStatement();
				st.executeUpdate("UPDATE prestamos SET estado = 0 where prestamos.idprestamo = " + idprestamo );
				System.out.println("Se cancelo la totalidad del prestamo" );
			} catch (SQLException e) {
				System.out.println("Error al modificar tablas.");
				e.printStackTrace();
			}
			finally {
				handler.closeResources(st, cn);
			 		}
		
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
}